package router

import (
	"first-gin/apis"
	"first-gin/pkg/logger"
	"github.com/gin-gonic/gin"
)

/*
Router
在 Gin 里面，一个 Web 服务器被抽象成为 Engine。
你可以在一个应用里面创建多个 Engine 实例，监听不同的端口。
Engine 承担了路由注册、接入 middleware 的核心职责
gin.Context
gin.Context 是 Gin 的上下文对象，它封装了 HTTP 请求和 HTTP 响应。
它的核心职责是：
- 处理请求
- 返回响应
*/
func Router() *gin.Engine {
	routerServer := gin.Default()
	routerServer.Use(gin.LoggerWithConfig(logger.RecordToFile()))
	routerServer.Use(logger.Recover)
	/* 1.使用路由分组，将相同前缀api放到一个组里。2.*/
	user := routerServer.Group("/user")
	{
		user.GET("/info/:id", apis.UserController{}.GetUserInfo)
		user.POST("/add", apis.UserController{}.AddUser)
		user.GET("/list", apis.UserController{}.GetList)
		user.PUT("/update", apis.UserController{}.UpdateByUserId)
		user.DELETE("/delete/:id", apis.UserController{}.DeletedById)

		//user.POST("/list", func(ctx *gin.Context) {
		//	ctx.String(http.StatusOK, "list user") 返回类型是字符串
		//	ctx.JSON(http.StatusOK, "list user") 返回类型是JSON
		//})
		//user.PUT("/add", func(ctx *gin.Context) {
		//	ctx.String(http.StatusOK, "add user")
		//})
		//user.DELETE("/delete", func(ctx *gin.Context) {
		//	ctx.JSON(http.StatusOK, "delete user")
		//})
	}
	order := routerServer.Group("/order")
	{
		order.POST("/list", apis.OrderController{}.GetList)
		order.POST("/list-map", apis.OrderController{}.GetListByMap)
		order.POST("/list-struct", apis.OrderController{}.GetListByStruct)
	}
	return routerServer

}
